In [1]:
import prody as pr
import py3Dmol
import tempfile
# --- notebook parameters (non-interactive) ---
import os, sys, asyncio
from pathlib import Path
import pandas as pd
from Analysis.PlotUtils import *
from scipy.ndimage import binary_dilation
import matplotlib.patches as mpatches
from IPython.display import display, HTML
from Bio import PDB
from Bio import pairwise2
from Bio.PDB import Superimposer
import py3Dmol
import ipywidgets as widgets
from Bio.PDB import PDBParser
from Bio import pairwise2
import py3Dmol
from Bio import PDB, Align
from Bio.PDB import PDBParser, PDBIO
# from Bio.PDB.Polypeptide import protein_letters_3to1
from io import StringIO
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap, BoundaryNorm
from matplotlib.patches import Patch
from config import *
from utils.utils import *
from utils.protein_utils import extract_protein_sequence
from utils.protein_plot_utils import *
CONFIG FOLD-SWITCH PIEPLINE WITH USER: orzuk ENVIRONMENT: Linux
PyRosetta not installed; skipping energy/ΔG panels
In [2]:
# Silence Windows asyncio warning from zmq/tornado
if sys.platform.startswith("win"):
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
# Get pair from environment (set by generate_notebooks.py)
fold_pair = os.getenv("PAIR_ID", "").strip()
if not fold_pair:
# We are likely running interactively in Jupyter UI (not nbconvert).
# Fall back to input() ONLY when stdin is available.
try:
fold_pair = input("Enter fold-switch pair (e.g., 3hdfA_3hdeA): ").strip()
except Exception:
raise RuntimeError(
"PAIR_ID not provided and no stdin available. "
"When running via generate_notebooks.py, PAIR_ID is set automatically."
)
# Normalize and split into the two PDB+chain ids
if "_" not in fold_pair:
raise ValueError(f"PAIR_ID must look like 'A_B', got: {fold_pair}")
pdb1, pdb2 = fold_pair.split("_", 1)
print("Using pair:", pdb1, pdb2)
Using pair: 2wcdX 4phqA
In [3]:
plot_tool = PlotTool(folder=DATA_DIR, fold_pair=fold_pair)
@> 53832 atoms and 1 coordinate set(s) were parsed in 1.33s.
@> 9797 atoms and 1 coordinate set(s) were parsed in 0.25s.
In [4]:
VIZ_FOLDER = f'{DATA_DIR}/{fold_pair}/output_cmap_esm/VizCmaps'
print("Fold-pair,", fold_pair, flush=True)
chains = (pdb1[-1].upper(), pdb2[-1].upper())
print("chains,", chains, flush=True)
pdb_path1 = f"{DATA_DIR}/{fold_pair}/{pdb1[:-1]}.pdb"
pdb_path2 = f"{DATA_DIR}/{fold_pair}/{pdb2[:-1]}.pdb"
#fold_pair_subdir = f"{fold_pair[0]}_{fold_pair[1]}"
Fold-pair, 2wcdX_4phqA
chains, ('X', 'A')
In [5]:
seq_fold1 = extract_protein_sequence(pdb_path1, chain=chains[0], ca_only=False)
seq_fold2 = extract_protein_sequence(pdb_path2, chain=chains[1], ca_only=False)
Visualizations and results¶
Original Structure Visualization¶
In [6]:
pdb_file1 = read_pdb_file(pdb_path1)
plot_tool.plot_single_fold(pdb_file1,label=plot_tool.fold1)
pdb_file2 = read_pdb_file(pdb_path2)
plot_tool.plot_single_fold(pdb_file2,label=plot_tool.fold2)
3Dmol.js failed to load for some reason. Please check your browser console for error messages.
3Dmol.js failed to load for some reason. Please check your browser console for error messages.
In [7]:
try:
plot_tool.plot_fold_alignement_(pdb_path1,pdb_path1)
except:
print('Structural Alignment Plot fail !')
@> 53832 atoms and 1 coordinate set(s) were parsed in 0.47s.
@> 53832 atoms and 1 coordinate set(s) were parsed in 0.47s.
2wcd_TEMP Blue:2wcd Red:2wcd
3Dmol.js failed to load for some reason. Please check your browser console for error messages.